/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb;

import Entites.*;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import javax.ejb.Stateful;
import javax.persistence.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author CDI102
 */
@Stateful
public class gestionCatalogue implements gestionCatalogueLocal {
    
    @PersistenceContext(unitName = "boutique-ejbPU")
    private EntityManager em;
       
//Catalogue
    public int calculerPageCatalogueClient(Long idClient, int nombreItemPage) {
        return 0;
    }
    
    public int calculerPageCatalogueComplet(int nombreItemPage) {
        return 0;
    }
    
    public void afficherCatalogueClient(Long idClient, int page) {
    }
    
    public void afficherCatalogueComplet(int page) {
    }
    
    public void chercherItemDansCatalogueComplet(int page) {
    }

//CRUD Produit
    @Override
    public Produit creerProduit(HttpServletRequest request, HttpServletResponse response,Client vendeur) {
        Produit prod = new Produit();
        prod.setDateMiseEnVente(new Timestamp((new Date()).getTime()));
        if(request.getParameter("description")!=null && !request.getParameter("description").trim().isEmpty())
        prod.setDescription(request.getParameter("description"));
        
        if(request.getParameter("nom")!=null && !request.getParameter("nom").trim().isEmpty())
        prod.setNom(request.getParameter("nom"));

        Double[] listDimension = new Double[3];
        if(request.getParameter("hauteur")!=null && !request.getParameter("hauteur").trim().isEmpty()){
           listDimension[0]= Double.parseDouble(request.getParameter("hauteur"));
        }else{
           listDimension[0]=0.0;
        }
        if(request.getParameter("largeur")!=null && !request.getParameter("largeur").trim().isEmpty()){
           listDimension[1]= Double.parseDouble(request.getParameter("largeur"));
        }else{
           listDimension[1]=0.0;
        }
        if(request.getParameter("hauteur")!=null && !request.getParameter("hauteur").trim().isEmpty()){
           listDimension[2]= Double.parseDouble(request.getParameter("profondeur"));
        }else{
           listDimension[2]=0.0;
        }
        prod.setListDimension(listDimension);    
        
        if(request.getParameter("poids")!=null && !request.getParameter("poids").trim().isEmpty())
        prod.setPoids(Double.parseDouble(request.getParameter("poids")));
        
        if(request.getParameter("prixBase")!=null && !request.getParameter("prixBase").trim().isEmpty())
        prod.setPrixDeBase(Double.parseDouble(request.getParameter("prixBase")));
        
        if(request.getParameter("prixFinal")!=null && !request.getParameter("prixFinal").trim().isEmpty())
        prod.setPrixFinal(Double.parseDouble(request.getParameter("prixFinal")));
        
        if(request.getParameter("prixLivraison")!=null && !request.getParameter("prixLivraison").trim().isEmpty())
        prod.setPrixLivraison(Double.parseDouble(request.getParameter("prixLivraison")));
        
        if(request.getParameter("typeLivraison")!=null && !request.getParameter("typeLivraison").trim().isEmpty())
        prod.setTypeLivraison(request.getParameter("typeLivraison"));
        
        if(vendeur!=null)
        prod.setVendeur(vendeur);
        
        if(request.getParameter("quantiteDispo")!=null && !request.getParameter("quantiteDispo").trim().isEmpty())
        prod.setQuantiteDisponible(Integer.parseInt(request.getParameter("quantiteDispo")));
        
        if(request.getParameter("categorie")!=null ){
            Categorie c = chercherCategorie(Long.valueOf(request.getParameter("categorie")));
            Collection<Categorie> listCat=new ArrayList<Categorie>();
            listCat.add(c);
            prod.setListCategorie(listCat);
        }

        em.persist(prod);
        
        if("Immediate".equalsIgnoreCase(request.getParameter("typeVente"))){
        VenteImmediate vi = new VenteImmediate();
        vi.setProduit(prod);
        em.persist(vi);
        prod.setVenteImmediate(vi);
        }
        
        if("Enchere".equalsIgnoreCase(request.getParameter("typeVente"))){
        VenteEnchere ve = new VenteEnchere();
             if(request.getParameter("montantEnchere")!=null && !request.getParameter("montantEnchere").trim().isEmpty())
             ve.setMontantEnchere(Double.parseDouble(request.getParameter("montantEnchere")));
             if(request.getParameter("palier")!=null && !request.getParameter("palier").trim().isEmpty())  
             ve.setPalier(Double.parseDouble(request.getParameter("palier")));
             if(request.getParameter("prixReserve")!=null && !request.getParameter("prixReserve").trim().isEmpty())    
             ve.setPrixReserve(Double.parseDouble(request.getParameter("prixReserve")));
             if(request.getParameter("dateDebut")!=null && !request.getParameter("dateDebut").trim().isEmpty())    
             ve.setDateDebutEnchere(Timestamp.valueOf(request.getParameter("dateDebut")));        
             if(request.getParameter("dateFin")!=null && !request.getParameter("dateFin").trim().isEmpty())    
             ve.setDateFinEnchere(Timestamp.valueOf(request.getParameter("dateFin")));        
        em.persist(ve);
        prod.setVenteEnchere(ve);
        }
        
        em.persist(prod);
        
        return prod;
    }
    
    @Override
    public void effacerProduit(Long idProduit) {
        if (idProduit != null) {
            Produit p=em.find(Produit.class, idProduit);
            em.remove(p);
        }
    }
    
    @Override
    public void modifierProduit(Produit prod) {
        if (prod != null) {
            em.persist(prod);
        }
    }
    
    @Override
    public Produit chercherProduit(Long idProduit) {
        return em.find(Produit.class, idProduit);
    }
    
    
    @Override
    public Collection<Produit> listerProduit() {
        String req = "select prod from Produit prod";
        Query qr = em.createQuery(req);
        Collection<Produit> listProd = qr.getResultList();
        return listProd;
    }
    

//CRUD Materiaux
    @Override
    public void creerMateriaux(Materiaux mat) {
        if (mat != null) {
            boolean test=true;
            Collection<Materiaux> listMat=listerMateriaux();
            for (Materiaux mate : listMat) {
                if(mate.getNom().equalsIgnoreCase(mat.getNom()))
                    test=false;
            }
            if (test)
            em.persist(mat);
        }
    }
    
    @Override
    public void effacerMateriaux(Long idMat) {
        if (idMat != null) {
            Materiaux m=em.find(Materiaux.class, idMat);
            em.remove(m);
        }
    }
    
    @Override
    public void modifierMateriaux(Materiaux mat) {
        if (mat != null) {
            em.merge(mat);
        }
    }
    
    @Override
    public Materiaux chercherMateriaux(Long idMat) {
        return em.find(Materiaux.class, idMat);
    }
    
    @Override
    public Collection<Materiaux> listerMateriaux() {
        String req = "select nom from Materiaux nom";
        Query qr = em.createQuery(req);
        Collection<Materiaux> listMat = qr.getResultList();
        return listMat;
    }
//CRUD VenteImmediate
    @Override
    public void creerVenteImmediate(VenteImmediate vente) {
        if (vente != null) {
            em.persist(vente);
        }
    }
    
    @Override
    public void effacerVenteImmediate(VenteImmediate vente) {
        if (vente != null) {
            em.remove(vente);
        }
    }
    
    @Override
    public void modifierVenteImmediate(VenteImmediate vente) {
        if (vente != null) {
            em.persist(vente);
        }
    }
    
    @Override
    public VenteImmediate chercherVenteImmediate(Long idVente) {
        return em.find(VenteImmediate.class, idVente);
    }

//CRUD VenteEnchere
    @Override
    public void creerVenteEnchere(VenteEnchere vente) {
        if (vente != null) {
            em.persist(vente);
        }
    }
    
    @Override
    public void effacerVenteEnchere(VenteEnchere vente) {
        if (vente != null) {
            em.remove(vente);
        }
    }
    
    @Override
    public void modifierVenteEnchere(VenteEnchere vente) {
        if (vente != null) {
            em.persist(vente);
        }
    }
    
    @Override
    public VenteEnchere chercherVenteEnchere(Long idVente) {
        return em.find(VenteEnchere.class, idVente);
    }

//CRUD Enchere
    @Override
    public void creerEnchere(Enchere enchere) {
        if (enchere != null) {
            em.persist(enchere);
        }
    }
    
    @Override
    public void effacerEnchere(Enchere enchere) {
        if (enchere != null) {
            em.remove(enchere);
        }
    }
    
    @Override
    public void modifierEnchere(Enchere enchere) {
        if (enchere != null) {
            em.persist(enchere);
        }
    }
    
    @Override
    public Enchere chercherEnchere(Long idEnchere) {
        return em.find(Enchere.class, idEnchere);
    }

//CRUD Categorie
    @Override
    public void creerCategorie(Categorie categorie) {
        if (categorie != null) {
            em.persist(categorie);
        }
    }
    
    @Override
    public void effacerCategorie(Long idCategorie) {
        if (idCategorie != null) {
            Categorie c=em.find(Categorie.class, idCategorie);
            em.remove(c);
        }
    }
    
    @Override
    public void modifierCategorie(Categorie categorie) {
        if (categorie != null) {
            em.merge(categorie);
        }
    }
    
    @Override
    public Categorie chercherCategorie(Long idCategorie) {
//        String req = "select nom from Categorie nom where nom.id=" + idCategorie;
//        Query qr = em.createQuery(req);
//        return (Categorie) qr.getSingleResult();
         return em.find(Categorie.class, idCategorie);
    }
    
    public Collection<Categorie> listerCategorie() {
        String req = "select nom from Categorie nom";
        Query qr = em.createQuery(req);
        Collection<Categorie> listCat = qr.getResultList();
        return listCat;
    }

//CRUD Promotion
    @Override
    public void creerPromotion(Promotion promotion) {
        if (promotion != null) {
            em.persist(promotion);
        }
    }
    
    @Override
    public void effacerPromotion(Promotion promotion) {
        if (promotion != null) {
            em.remove(promotion);
        }
    }
    
    @Override
    public void modifierPromotion(Promotion promotion) {
        if (promotion != null) {
            em.persist(promotion);
        }
    }
    
    @Override
    public Promotion chercherPromotion(Long idPromotion) {
        return em.find(Promotion.class, idPromotion);
    }

//CRUD AlerteAchat
    @Override
    public void creerAlerteAchat(AlerteAchat alerteAchat) {
        if (alerteAchat != null) {
            em.persist(alerteAchat);
        }
    }
    
    @Override
    public void effacerAlerteAchat(AlerteAchat alerteAchat) {
        if (alerteAchat != null) {
            em.remove(alerteAchat);
        }
    }
    
    @Override
    public void modifierAlerteAchat(AlerteAchat alerteAchat) {
        if (alerteAchat != null) {
            em.persist(alerteAchat);
        }
    }
    
    @Override
    public AlerteAchat chercherAlerteAchat(Long idAlerteAchat) {
        return em.find(AlerteAchat.class, idAlerteAchat);
    }

    //CRUD AlerteEnchere
    @Override
    public void creerAlerteEnchere(AlerteEnchere alerteEnchere) {
        if (alerteEnchere != null) {
            em.persist(alerteEnchere);
        }
    }
    
    @Override
    public void effacerAlerteEnchere(AlerteEnchere alerteEnchere) {
        if (alerteEnchere != null) {
            em.remove(alerteEnchere);
        }
    }
    
    @Override
    public void modifierAlerteEnchere(AlerteEnchere alerteEnchere) {
        if (alerteEnchere != null) {
            em.persist(alerteEnchere);
        }
    }
    
    @Override
    public AlerteEnchere chercherAlerteEnchere(Long idAlerteEnchere) {
        return em.find(AlerteEnchere.class, idAlerteEnchere);
    }
    
    public void persist(Object object) {
        em.persist(object);
    }
}
